﻿using System;


namespace DailyFx.AI
{

	/// <summary>
	///		'Expert' stands for a particular aspect of a problem solving strategy . 
	///		- It fetches infomations from a blackboard, 
	///		- and contributes new or updates existing knowledges.
	/// </summary>
	public interface IExpert
	{
		/// <summary>
		///		Gets the role acted by this expert . 
		/// </summary>
		int Role { get; }

		/// <summary>
		///		Gets the ranking ( priority ) .
		/// </summary>
		int Ranking { get; }


		/// <summary>
		///		Determins is there enough infomation presented on the blackboard .
		/// </summary>
		bool awared ( IBlackboard blackboard ) ;

		/// <summary>
		///		Solves the promblem with exsiting knowledges presented on the blackborad .
		///		- NB: Alright, we only use one blackboard .
		/// </summary>
		void Run ( IBlackboard blackboard );

		/// <summary>
		///		Breaks away from current problem solving .
		/// </summary>
		void Stop();


	}
}
